home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 10 - 1994 / 10.09 Sep 94 / More Dylan / movie-document.dylan next >
Encoding:
Text File  |  1994-09-21  |  3.1 KB  |  107 lines  |  [TEXT/ttxt]

  1. // source container: movie-document.dylan
  2.  
  3.  
  4. define class <movie-document> (<document>)
  5.   slot movie :: <Movie>, 
  6.         init-value: as(<Movie>, 0);
  7.   slot movie-view :: <movie-view>;
  8. end class;
  9.  
  10. define method main-file-type (document :: <movie-document>)
  11.   ignore(document);
  12.   $MovieFileType;
  13. end method;
  14.  
  15. //opens up a window containing a view onto the movie
  16. define method make-windows (document :: <movie-document>)
  17.   let movie-bounds =
  18.        with-stack-structure(box(<qd-rect>),
  19.                             begin
  20.                               GetMovieBox(document.movie, box);
  21.                               get-rect(box);
  22.                             end);
  23.   let movie-size = point(movie-bounds.width, movie-bounds.height);
  24.   
  25.   document.movie-view := make(<movie-view>, 
  26.                               location: $zero-point, 
  27.                               size: movie-size);
  28.   
  29.   let window = make(<window>,
  30.                     location: point(100, 100),
  31.                     size: movie-size,
  32.                     next-handler: document,
  33.                     target-view: document.movie-view,
  34.                     has-go-away: #t);
  35.   
  36.   add-sub-view(window.root-view, document.movie-view);
  37.   
  38.   open(window);
  39.   
  40.   set-movie-to-view(document.movie-view, document.movie);  
  41.   make-document-title(document);
  42. end method;
  43.  
  44. define method open-files (document :: <movie-document>)
  45.   open-movie-file(document.main-file);
  46. end method;
  47.  
  48. define method close-files (document :: <movie-document>)
  49.   close-movie-file(document.main-file);
  50. end method;
  51.  
  52. // gets the movie data in correctly from a file
  53. define method read-from-file (document :: <movie-document>,
  54.                               file :: <file>) 
  55.   
  56.   let (err, new-movie,resId) = NewMovieFromFile( file.data-ref-num, "",  0);
  57.   ignore(resId);
  58.   fail-os-error(err);
  59.   document.movie := new-movie;
  60.   close-files(document); 
  61.   
  62. end method;
  63.  
  64.  
  65. // highlights the menu items in the Movie menu
  66. define method do-setup-menus (document :: <movie-document>)
  67.   next-method();
  68.  
  69.   enable-item(#"show-poster");
  70.   enable-item(#"set-poster");
  71.   
  72. end method;
  73.  
  74. // menu callback for Show Poster menu item - goes to the poster frame
  75. define method do-event (document :: <movie-document>,
  76.                         event :: <menu-event>,
  77.                         id == #"show-poster")
  78.   ignore(event, id);
  79.   
  80.   unless (nil?(document.movie))  
  81.     let movie = document.movie;
  82.     let poster-time = GetMoviePosterTime(movie);
  83.     let movie-time = GetMovieTime(movie, as(<TimeRecord>, 0));
  84.     
  85.     unless (poster-time = movie-time)
  86.       StopMovie(movie);
  87.       SetMovieTimeValue(movie, poster-time);
  88.     end unless;
  89.     
  90.   end unless;
  91. end method;
  92.  
  93. // menu callback for Set Poster menu item - sets movie poster to be the 
  94. //current frame
  95. define method do-event (document :: <movie-document>,
  96.                         event :: <menu-event>,
  97.                         id == #"set-poster")
  98.   ignore(event, id);
  99.   
  100.   unless (nil?(document.movie))  
  101.     let movie = document.movie;
  102.     let new-poster-time = GetMovieTime(movie, as(<TimeRecord>, 0));
  103.     
  104.     SetMoviePosterTime(movie, new-poster-time);
  105.   end unless;
  106.   
  107. end method;